//////////////////////////////////////////////////////////////////////////////////////////////////////
// 项目名   : DefaultFunctionControl
// 文件名   : DefaultFunctionControl.h
// 作者     : Aiye
// 日期     : 2025/8/19 12:26
// 邮箱     : 2878548868@qq.com
// 摘要     : 介绍默认函数控制
//////////////////////////////////////////////////////////////////////////////////////////////////////
#ifndef DEFAULTFUNCTIONCONTROL_DEFAULTFUNCTIONCONTROL_H
#define DEFAULTFUNCTIONCONTROL_DEFAULTFUNCTIONCONTROL_H
#include <iostream>

/**
 * @brief 介绍默认函数控制
 */
class DefaultControl
{
public:
    /**
     * @brief 实现一个占位有参构造函数
     */
    DefaultControl(int)
    {
        std::cout << "Implement a constructor with parameters" << std::endl;
    }

    /**
     * @brief 当实现了有参构造函数，编译器就不会默认实现无参构造函数
     */
    DefaultControl() = default;

    /**
     * @brief 删除拷贝构造函数
     */
    DefaultControl(const DefaultControl& other) = delete;

    DefaultControl(DefaultControl&& other) noexcept = delete;

    DefaultControl& operator =(const DefaultControl& other) = delete;

    DefaultControl& operator =(DefaultControl&& other) noexcept = delete;

    virtual ~DefaultControl() = default;

public:
    /**
     * @brief 声明一个虚函数
     */
    virtual void func()
    {
        std::cout << "This is a base class" << std::endl;
    }
};

/**
 * @brief final 关键字不允许子类再被继承
 */
class Derived final : public DefaultControl
{
public:
    ~Derived() override;

    /**
     * @brief override 检查是否正确继承基类，final不允许再被子类继承
     */
    void func() override final
    {
        std::cout << "This is a derived class" << std::endl;
    }
};

#endif //DEFAULTFUNCTIONCONTROL_DEFAULTFUNCTIONCONTROL_H
